// 引入 axios
import axios from "axios"
import { ElMessageBox } from 'element-plus'
import router from "@/router/index.js"


// 配置 axios

let http = axios.create({
    // 基础地址设置
    baseURL: "/api",
    // 超时设置
    timeout: 1000 * 10,
    // 是否携带 凭据给后台
    withCredentials: true
})


// 配置拦截器   


// 1.请求拦截器 所有的axios请求都会被 请求拦截器 拦截 可通过拦截器添加额外配置
http.interceptors.request.use(config => {
    let token = sessionStorage.getItem("data")
    // console.log(config);
    config.headers.authorization = token
    return config;
})

// 2.响应拦截器 所有的axios响应数据都会被 响应拦截器 拦截 可通过拦截器添加额外配置

http.interceptors.response.use(config => {
    // console.log(config);
    if (config.data.state) {
        // 正常响应
        return config
    } else {

        // 不需要弹窗提示的路径
        let excludePath = ["/sms/send","/order/query_order_status"]
        
        // 如果 excludePath 中不包含当前路径 给消息弹窗
        if (!excludePath.includes(config.config.url)) {
            // 响应错误
            ElMessageBox.alert(config.data.msg, '错误提示')
        }

        // 判断登录失效的情况 10022(登录态过期) 1004(token过期) 前后端通俗约定的状态码 不是http的状态码
        if(config.data.code == "10022" || config.data.code == "1004"){
            // 删除token
            sessionStorage.removeItem("data")
            // 跳转到登录页
            router.push("/login")
            // 刷新页面清掉缓存
            location.reload()
        }
        return Promise.reject(config.data.msg)
    }
})

// 导出
export default http;